Spring Security 是一個用於保護和管理 Java 應用程式安全性的框架。它提供了身份驗證、授權和其他安全功能,可用於防止未經授權的訪問、數據外洩和其他安全威脅。
Spring Security 的主要特點和概念包括:
以下是一個簡單的 Spring Security 示例,演示如何配置 Spring Boot 應用程序以進行基本的身份驗證和授權。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
SecurityConfig,除了定義一個基本的使用者帳戶,也設置了訪問控制規則,使用者必須在訪問某些頁面之前進行登錄,否則需要進行身份驗證。import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
    // 定義一個 UserDetailsService Bean,這個 Bean 負責提供使用者詳細信息,包括使用者名稱、密碼和角色。
    @Bean
    public UserDetailsService userDetailsService() {
        // 建立一個使用者帳戶,使用 withDefaultPasswordEncoder() 方法對密碼進行加密。
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();
        // 使用 InMemoryUserDetailsManager 來管理使用者詳細信息,這裡只有一個使用者。
        return new InMemoryUserDetailsManager(user);
    }
    // 設置 Spring Security 的訪問控制規則
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests() // 定義哪些路徑可以被公開訪問
                .antMatchers("/", "/home").permitAll() // 定義除了上面設置的路徑外,其他所有請求都需要驗證身份。
                .anyRequest().authenticated()
                .and()
            .formLogin() // 指定登錄頁面的路徑。
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
}
@Bean 用來定義一個 UserDetailsService Bean,這個 Bean 用於提供使用者詳細資訊。我們在這裡使用 InMemoryUserDetailsManager 來管理我們的使用者帳戶。configure(HttpSecurity http) 方法中,我們設置了訪問控制規則。使用 antMatchers() 定義哪些路徑可以被公開訪問,使用 anyRequest().authenticated() 規定所有其他請求都需要驗證身份。formLogin() 設置了表單登錄的相關配置,包括登錄頁面的路徑。logout() 定義了登出操作的相關設定。以上,我們就完成了一個簡單的 Spring Security 範例,它可以根據我的應用程式需求進行更複雜的設置和規劃。
https://spring.io/projects/spring-security
https://www.baeldung.com/security-spring